//package com.plian.system.listener;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.plian.Tools.BigDecimalUtil;
//import com.plian.Tools.CollectionUtil;
//import com.plian.Tools.StringUtil;
//import com.plian.Tools.pagedata.PageData;
//import com.plian.system.entity.fr.indicators.FinanceIndicators;
//import com.plian.system.entity.fr.indicators.FinanceIndicatorsSupplement;
//import com.plian.system.entity.fr.indicators.IndicatorsValue;
//import com.plian.system.mapper.fr.indicators.FinanceIndicatorsMapper;
//import com.plian.system.service.fr.financeindicators.IFinanceIndicatorsSupplementService;
//import com.plian.system.service.fr.indicatorsvalue.IndicatorsValueService;
//import lombok.AllArgsConstructor;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.context.ApplicationListener;
//import org.springframework.scheduling.annotation.Async;
//import org.springframework.stereotype.Component;
//
//import java.math.BigDecimal;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
//
///**
// * @description:
// * @author: gangan
// * @create: 2020-09-22 10:50
// */
//@Component
//@AllArgsConstructor
//public class BulletinListener implements ApplicationListener<BulletinEvent> {
//
//    private static final Logger log = LoggerFactory.getLogger(BulletinListener.class);
//
//    private FinanceIndicatorsMapper financeIndicatorsMapper;
//
//    private IndicatorsValueService indicatorsValueService;
//
//    private IFinanceIndicatorsSupplementService financeIndicatorsSupplementService;
//
//    @Async("ttlExecutor")
//    @Override
//    public void onApplicationEvent(BulletinEvent event) {
//        List<PageData> list = (List<PageData>) event.getSource();
//
//        //原来的数据 新增时为空
//        PageData oldPageData = list.get(0);
//        //修改后的数据
//        PageData pageData = list.get(1);
//        log.info("修改指标值------->开始");
//        if (CollectionUtil.isEmpty(pageData)){
//            log.error("快报修改数据为空");
//            return;
//        }
//
//        String year = pageData.getString("reportTime").substring(0, 4);
//        String month = pageData.getString("reportTime").substring(5, 7);
//        String isGroup = "0";
//        String tableTypeCode = pageData.getString("tableTypeCode");
//        String orgId = pageData.getString("orgId");
//        if ("1".equals(tableTypeCode)){
//            log.info("差额表------->结束");
//            return;
//        }
//        if ("6".equals(tableTypeCode)){
//            isGroup = "1";
//        }
//        List<FinanceIndicators> financeIndicatorsList = financeIndicatorsMapper.selectList(new QueryWrapper<FinanceIndicators>().eq("data_source", 2));
//        if (CollectionUtil.isEmpty(financeIndicatorsList)){
//            log.error("FinanceIndicators 快报指标基础数据未配置！");
//            return;
//        }
//        List<FinanceIndicatorsSupplement> supplements = financeIndicatorsSupplementService.list(new QueryWrapper<FinanceIndicatorsSupplement>().eq("data_source", 2).eq("year", year));
//        Map<String, List<FinanceIndicatorsSupplement>> supplementMap = supplements.stream().collect(Collectors.groupingBy(FinanceIndicatorsSupplement::getFinanceIndicatorsId));
//        financeIndicatorsList.forEach(p -> {
//            if (supplementMap.containsKey(p.getId())) {
//                p.setFieldName(supplementMap.get(p.getId()).get(0).getFieldName());
//            }
//        });
//        List<String> financeIndicatorsIds = financeIndicatorsList.stream().map(FinanceIndicators::getId).collect(Collectors.toList());
//
//
//        Map<String, String> map = financeIndicatorsList.stream().collect(Collectors.toMap(p -> p.getCode()+ "-" + p.getFieldName(), FinanceIndicators::getId));
//
//        Map<String, List<IndicatorsValue>> indicatorsValueMap = indicatorsValueService.list(new QueryWrapper<IndicatorsValue>().eq("fyear", year)
//                .eq("fmonth", month).eq("org_id", orgId).eq("is_group", isGroup).in("indicators_id", financeIndicatorsIds))
//                .stream().collect(Collectors.groupingBy(IndicatorsValue::getIndicatorsId));
//
//
//        Map<String, List<IndicatorsValue>> totalIndicatorsValueMap = indicatorsValueService.list(new QueryWrapper<IndicatorsValue>().eq("fyear", year)
//                .eq("fmonth", "00").eq("org_id", orgId).eq("is_group", isGroup).in("indicators_id", financeIndicatorsIds))
//                .stream().collect(Collectors.groupingBy(IndicatorsValue::getIndicatorsId));
//
//        List<IndicatorsValue> updateList = new ArrayList<>();
//        map.forEach((k, v) -> {
//            BigDecimal oldValue = new BigDecimal(0);
//            BigDecimal newValue = new BigDecimal(0);
//            String k2 = k.split("-")[1];
//            if (pageData.containsKey(k2)){
//                newValue = new BigDecimal(StringUtil.isNotBlank(pageData.getString(k2)) ? StringUtil.cleanChars(pageData.getString(k2)) : "0");
//            }
//
//            if (oldPageData.containsKey(k2)){
//                oldValue = new BigDecimal(StringUtil.isNotBlank(oldPageData.getString(k2)) ? StringUtil.cleanChars(oldPageData.getString(k2)) : "0");
//            }
//
//            if (newValue.compareTo(oldValue) != 0){
//                if (indicatorsValueMap.containsKey(v)){
//                    IndicatorsValue indicatorsValue = indicatorsValueMap.get(v).get(0);
//                    IndicatorsValue totalIndicatorsValue = totalIndicatorsValueMap.get(v).get(0);
//                    indicatorsValue.setFvalue(newValue);
//                    BigDecimal totalFvalue = totalIndicatorsValue.getFvalue();
//                    totalFvalue = BigDecimalUtil.add(BigDecimalUtil.subtract(totalFvalue, oldValue), newValue);
//                    totalIndicatorsValue.setFvalue(totalFvalue);
//                    updateList.add(indicatorsValue);
//                    updateList.add(totalIndicatorsValue);
//                }
//            }
//        });
//
//
//        if (CollectionUtil.isNotEmpty(updateList)){
//            indicatorsValueService.updateBatchById(updateList);
//        }
//
//        log.info("修改指标值------->结束");
//    }
//}
